import { ref } from 'vue';

import { deepClone } from '../utils/dataTreating';

/**
 * 使用具有重置功能的响应式引用的自定义钩子
 *
 * @param value 初始值，可以是任意类型
 * @returns 返回一个包含当前状态和重置状态函数的元组
 *
 * 此函数通过接收一个初始值来创建一个响应式引用，并提供一个重置功能
 * 使用深拷贝来初始化初始值，以确保传入的值不会因为引用而被意外修改
 */
export function useResettableRef<T>(value: T) {
  // 使用深拷贝来初始化初始值
  const initialValue = deepClone(value);
  // 创建一个响应式引用
  const state = ref(value);

  // 重置函数，每次重置时都深拷贝初始值，避免引用变化
  const reset = () => {
    state.value = deepClone(initialValue);
  };

  // 返回当前状态和重置状态的函数，确保调用者可以访问和修改状态
  return [state, reset] as const;
}
